package com.lengchangjing.BehavioralPatterns.InterpreterPattern.example;

/**
 * 除法表达式，是非终结符表达式。
 */
public class Division extends Expression {

    // 被除数，除数
    private Expression dividend, divisor;

    /**
     * 构造器
     *
     * @param dividend 被除数
     * @param divisor  除数
     */
    public Division(Expression dividend, Expression divisor) {
        this.dividend = dividend;
        this.divisor = divisor;
    }

    /**
     * 除法语法解释
     *
     * @param ctx 上下文
     * @return 除法结果
     */
    @Override
    public int interpret(Context ctx) {
        try {
            return dividend.interpret(ctx) / divisor.interpret(ctx);
        } catch (ArithmeticException e) {
            System.out.println("错误，除数不能为零。");
            throw e;
        }
    }
}
